package Connector;

//接口
//接口的定义和使用：

//接口的定义格式：
//public interface 接口名 {}
//接口不能实例化。

//接口和类之间的关系：实现关系，通过 implements 关键字表示。
//类实现接口的格式：
//public class 类名 implements 接口名 {}

//接口的子类（实现类）
//1. 要么重写接口中的所有抽象方法。
//2. 要么是抽象类。

//注意1：接口和类的实现关系，可以单实现，也可以多实现。
//public class 类名 implements 接口名1,接口名2,接口名3 {}
//注意2：实现类还可以在继承一个类的同时实现多个接口。
//public class 类名 extends 父类 implements 接口名1,接口名2,接口名3 {}

//抽象类
//抽象类的特点：
//1. 抽象类和抽象方法必须使用 abstract 关键字修饰。
//2. 抽象类中不一定有抽象方法，但是有抽象方法的类一定是抽象类。
//3. 抽象类不能实例化。
//4. 抽象类可以有构造方法，但是不能实例化。
//5. 抽象类可以有成员变量，也可以有成员方法。
//6. 抽象类可以有静态方法，但是不能有静态变量。
//7. 抽象类可以有静态代码块，但是不能有静态变量。

//接口中的默认方法和静态方法
//1. 默认方法：使用 default 修饰，供子类调用或者子类重写。
//2. 静态方法：使用 static 修饰，只能供接口直接调用。
public class Test {
     public static void main(String[] args) {
        //接口
        Dog dog = new Dog();
        dog.eat();
        dog.sleep();
        dog.swim();

        Animal dog2 = new Dog();
        dog2.eat();
        dog2.sleep();

        Son son = new Son();
        son.eat();
        son.sleep();
        son.swim();
        //dog2.swim();

        show(dog);
        show(son);
    }
   public  static void show(Swim swim)
   {
      swim.swim();
   }
}
